package com.bicon.botu.mall.base.service.impl;


import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.bicon.botu.mall.base.common.ValidationUtil;
import com.bicon.botu.mall.base.dto.ExpressTemplateDTO;
import com.bicon.botu.mall.base.entity.DeliveryPoint;
import com.bicon.botu.mall.base.entity.ExpressTemplate;
import com.bicon.botu.mall.base.mapper.ExpressTemplateMapper;
import com.bicon.botu.mall.base.service.IExpressTemplateService;
import com.bicon.botu.core.base.common.Constants;
import com.bicon.botu.core.base.common.entity.BaseResult;
import com.bicon.botu.core.base.common.utils.IdGen;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.ArrayList;
import java.util.List;

/**
 * 快递单据模板 服务实现类
 *
 * @author liushujie
 * @date 2017/7/19 下午 14:49
 */
@Service
public class ExpressTemplateImpl extends ServiceImpl<ExpressTemplateMapper, ExpressTemplate> implements IExpressTemplateService {

    /**
     * 新增快递单模板
     *
     * @param name   名称
     * @param width  宽
     * @param height 高
     * @param url    图片url
     * @param sort   排序号
     * @return
     */
    @Override
    public BaseResult insert(String name, String width, String height, String url, Integer sort, String anchorPoint,String offset) {
        //根据商户ID,和发货点名称检查是否有相同的发货点已存在，存在则返回提示信息。反之创建，并初始化缓存。
        ExpressTemplate expressTemplate = new ExpressTemplate().selectOne(new EntityWrapper<ExpressTemplate>().eq("name", name)
                .eq("logic_delete", Constants.DEL_LOGIC_NORMAL));
        if (expressTemplate != null) {
            return new BaseResult(Constants.RESPONSE_CODE_601, Constants.RESPONSE_MESSAGE_601);
        }
        ExpressTemplate expressTemplate1 = new ExpressTemplate();
        expressTemplate1.preInsert();
        expressTemplate1.setName(name);
        expressTemplate1.setTenantId(IdGen.uuid());
        expressTemplate1.setWidth(width);
        expressTemplate1.setHeight(height);
        expressTemplate1.setUrl(url);
        expressTemplate1.setSort(sort);
        expressTemplate1.setAnchorPoint(anchorPoint);
        expressTemplate1.setOffset(offset);
        //默认不启用
        expressTemplate1.setStatus(0);
        boolean result = expressTemplate1.insert();
        if (!result) {
            return new BaseResult(Constants.RESPONSE_CODE_500, Constants.RESPONSE_MESSAGE_500);
        }
        return new BaseResult(Constants.RESPONSE_CODE_200, Constants.RESPONSE_MESSAGE_200);
    }


    /**
     * 修改快递单模板
     *
     * @param id     主鍵id
     * @param name   名称
     * @param width  宽
     * @param height 高
     * @param url    图片url
     * @param sort   排序号
     * @return
     */
    @Override
    public BaseResult update(String id, String name, String width, String height, String url, Integer sort, String anchorPoint,String offset) {
        ExpressTemplate expressTemplate = new ExpressTemplate().selectOne(new EntityWrapper<>().eq("id", id)
                .eq("logic_delete", Constants.DEL_LOGIC_NORMAL));
        if (ValidationUtil.isEmpty(expressTemplate)) {
            return new BaseResult(Constants.RESPONSE_CODE_404, Constants.RESPONSE_MESSAGE_404);
        }

        expressTemplate.preUpdate();
        //参数校验
        if (!ValidationUtil.isEmpty(name)) {
            expressTemplate.setName(name);
            //快单单模板名称不能重复
            ExpressTemplate expressTemplate1 = new ExpressTemplate().selectOne(new EntityWrapper<ExpressTemplate>().notIn("id",id).eq("name", name)
                    .eq("logic_delete", Constants.DEL_LOGIC_NORMAL));
            if (expressTemplate1 != null) {
                return new BaseResult(Constants.RESPONSE_CODE_601, Constants.RESPONSE_MESSAGE_601);
            }
        }
        if (!ValidationUtil.isEmpty(width)) {
            expressTemplate.setWidth(width);
        }
        if (!ValidationUtil.isEmpty(height)) {
            expressTemplate.setHeight(height);
        }
        if (!ValidationUtil.isEmpty(url)) {
            expressTemplate.setUrl(url);
        }
        if (!ValidationUtil.isEmpty(sort)) {
            expressTemplate.setSort(sort);
        }
        if (!ValidationUtil.isEmpty(anchorPoint)) {
            expressTemplate.setAnchorPoint(anchorPoint);
        }
        if (!ValidationUtil.isEmpty(offset)) {
            expressTemplate.setOffset(offset);
        }
        boolean result = expressTemplate.updateById();
        if (!result) {
            return new BaseResult(Constants.RESPONSE_CODE_500, Constants.RESPONSE_MESSAGE_500);
        }
        return new BaseResult(Constants.RESPONSE_CODE_200, Constants.RESPONSE_MESSAGE_200);
    }

    /**
     * 修改启动关闭状态
     *
     * @param id     模板id
     * @param status 状态 0 关闭 1开启
     * @return
     */
    @Override
    public BaseResult updateStatus(String id, Integer status) {
        ExpressTemplate expressTemplate = new ExpressTemplate().selectOne(new EntityWrapper<>().eq("id", id)
                .eq("logic_delete", Constants.DEL_LOGIC_NORMAL));
        if (ValidationUtil.isEmpty(expressTemplate)) {
            return new BaseResult(Constants.RESPONSE_CODE_404, Constants.RESPONSE_MESSAGE_404);
        }
        expressTemplate.preUpdate();
        if (!ValidationUtil.isEmpty(status)) {
            expressTemplate.setStatus(status);
        }
        boolean result = expressTemplate.updateById();
        if (!result) {
            return new BaseResult(Constants.RESPONSE_CODE_500, Constants.RESPONSE_MESSAGE_500);
        }
        return new BaseResult(Constants.RESPONSE_CODE_200, Constants.RESPONSE_MESSAGE_200);
    }

    /**
     * 刪除快递单模板
     *
     * @param id 模板id
     * @return true false
     */
    @Override
    public BaseResult deleteExpressTemplate(String id) {
        String[] idArray = id.split(",");
        List<ExpressTemplate> expressTemplateList = new ArrayList<>();
        for (int i = 0; i < idArray.length; i++) {
            ExpressTemplate expressTemplate = new ExpressTemplate();
            expressTemplate.setId(idArray[i]);
            expressTemplate.setLogicDelete(Constants.DEL_LOGIC_DELETE);
            expressTemplate.preUpdate();
            expressTemplateList.add(expressTemplate);
        }
        boolean result = this.updateBatchById(expressTemplateList);
        if (!result) {
            return new BaseResult(Constants.RESPONSE_CODE_500, Constants.RESPONSE_MESSAGE_500);
        }
        return new BaseResult(Constants.RESPONSE_CODE_200, Constants.RESPONSE_MESSAGE_200);
    }

    /**
     * 快递单模板詳情
     *
     * @param id 模板id
     * @return ExpressTemplateDTO
     */
    @Override
    public ExpressTemplateDTO detail(String id) {
        ExpressTemplate expressTemplate = new ExpressTemplate().selectOne(new EntityWrapper<>().eq("id", id)
                .eq("logic_delete", Constants.DEL_LOGIC_NORMAL));
        ExpressTemplateDTO expressTemplateDTO = new ExpressTemplateDTO();
        if (!ValidationUtil.isEmpty(expressTemplate)) {
            BeanUtils.copyProperties(expressTemplate, expressTemplateDTO);
        }
        return expressTemplateDTO;
    }
}
